﻿using System;
using System.Collections.Generic;
using System.Threading;
using System.Net;
using System.Text;
using System.IO;

namespace libvkontakte
{
    public class User: IDisposable
    {
        public string Password;
        public string Email;
        private readonly Connection _connection;
        private bool _loginStatus = false;
        public List<Dictionary<string, string>> MessageCollection = new List<Dictionary<string, string>>();

        public User(string email,string password)
        {
            this.Email = email;
            this.Password = password;
            this._connection = new Connection();
        }

        public User()
        {
            this.Email = "";
            this.Password = "";
            this._connection = new Connection();
        }

        public void SetProxy(WebProxy proxy)
        {
            _connection.Proxy = proxy;
        } 

        public void DeleteProxy()
        {
            _connection.Proxy = null;
        }

        public bool IsLogin()
        {
            return this._loginStatus;
        }

        /// <summary>
        /// Вход и проверка.
        /// </summary>
        /// <returns>True - залогинились. False - незалогинились </returns>
        
        public bool Login()
        {
            if (this._loginStatus)
            {
                return false;
            }
            string data = "email=" + this.Email + "&pass=" + this.Password;
            var response = this._connection.SendRequest(PagesUrls.LoginUrl, data);
            this._loginStatus = API.IsLogin(response);
            return this._loginStatus;
        }

        /// <summary>
        /// Выход и проверка.
        /// </summary>
        /// <returns></returns>
        public bool Logout()
        {
            if (!this._loginStatus) return false;
            var response = this._connection.SendRequest(PagesUrls.LogoutUrl);
            return API.IsLogout(this._connection.SendRequest(PagesUrls.MainPageUrl));
        }

        /// <summary>
        /// Обновить список новых сообщений.
        /// </summary>
        /// <returns>this.MessageCollection</returns>
        public bool LoadNewMessages()
        {
            if (!this._loginStatus) return false;
            var response = this._connection.SendRequest(PagesUrls.MessagesUrl);
            var html = Connection.ReadResponse(response);
            this.MessageCollection = API.ParseMessagesPage(html);
            return true;
        }

        /// <summary>
        /// Получаем циферки стоящие в правом меню напротив всех пунктов
        /// </summary>
        /// <example>Сообщения(2)
        ///          Друзья(1)
        ///          Встречи(2)
        ///          и тд.
        /// </example>
        public Dictionary<string,int> GetIndexes()
        {
            var resp = this._connection.SendRequest(PagesUrls.MainPageUrl);
            var html = Connection.ReadResponse(resp);
            return API.GetBarIndexes(html);
        }

        /// <summary>
        /// Проверяем что нового в индексах. Если что-то есть то 
        /// в новом потоке загружаем данные.
        /// </summary>
        public Dictionary<string,int> CheckIndexes()
        {
            var currentIndexes = this.GetIndexes();
            return currentIndexes;
        }

       
        public void Dispose()
        {
            if (this._loginStatus) this.Logout();
        }
    }

    /// <summary>
    /// Список адресов для доступа.
    /// </summary>
    public struct PagesUrls
    {
        public static string LoginUrl = "http://vkontakte.ru/login.php";
        public static string LogoutUrl = "http://pda.vkontakte.ru/logout";
        public static string NewsUrl = "http://pda.vkontakte.ru/news";
        public static string FriendsOnlineUrl = "http://pda.vkontakte.ru/friendsonline";
        public static string FriendsUrl = "http://pda.vkontakte.ru/friends";
        public static string MessagesUrl = "http://pda.vkontakte.ru/inbox";
        public static string NewMessagesUrl = "http://vkontakte.ru/mail.php#filter=new&out=0";
        public static string MainPageUrl = "http://pda.vkontakte.ru";
    }
}
